tests/testthat/profiling for bootstrap.residuals.R

load("C:/Users/nikos/Desktop/SAE_proj_data.RData")

library(microbenchmark)
library(parallel)
library(mvtnorm)

Rcpp::sourceCpp("C:/Users/nikos/Desktop/SAE/R/SamplingWithC.cpp")


# Alternative 1.0 ###############################################################################
# drawing indices instead of directly drawing residuals
bootstrap.residuals1.0 <-
  function(n_boot1,
           sample_size,
           num_residuals,
           residuals) {
    bootstap_indices <-
      sample(
        x = 1:num_residuals,
        size = sample_size * n_boot1,
        replace = T
      )

    matrix(residuals[bootstap_indices], ncol = n_boot1)
  }

# Alternative 1.1 ###############################################################################
bootstrap.residuals1.1 <-
  function(n_boot1,
           sample_size,
           num_residuals,
           residuals) {
    bootstap_indices <-
      sample(
        x = seq.int(from = 1, to = num_residuals),
        size = sample_size * n_boot1,
        replace = T
      )

    matrix(residuals[bootstap_indices], ncol = n_boot1)
  }

# Alternative 1.2 ###############################################################################
bootstrap.residuals1.2 <-
  function(n_boot1,
           sample_size,
           num_residuals,
           residuals) {
    bootstap_indices <- rddrawIndicesC(num_residuals, sample_size * n_boot1)
    matrix(residuals[bootstap_indices], ncol = n_boot1)
  }

# Alternative 1.3 ###############################################################################
# drawing indices separately, but implementing both steps in C++
bootstrap.residuals1.3 <-
  function(n_boot1,
           sample_size,
           num_residuals,
           residuals) {
    return(rddrawIndicesC2(num_residuals, sample_size * n_boot1, residuals))
  }

# Alternative 2 ###############################################################################
# drawing directly from the residuals with R
bootstrap.residuals2 <-
  function(n_boot1,
           sample_size,
           num_residuals,
           residuals) {
    matrix(sample(
      x = residuals,
      size = sample_size * n_boot1,
      replace = T
    ),
    ncol = n_boot1)
  }




mbm <- microbenchmark(
  alt1.0 = bootstrap.residuals1.0(
    n_boot1 = 250,
    sample_size = n_obs_census,
    num_residuals = n_obs_survey,
    residuals = inference_survey$errorterm$residuals
  ),
  alt1.1 = bootstrap.residuals1.1(
    n_boot1 = 250,
    sample_size = n_obs_census,
    num_residuals = n_obs_survey,
    residuals = inference_survey$errorterm$residuals
  ),
  alt1.2 = bootstrap.residuals1.2(
    n_boot1 = 250,
    sample_size = n_obs_census,
    num_residuals = n_obs_survey,
    residuals = inference_survey$errorterm$residuals
  ),
  alt1.3 = bootstrap.residuals1.3(
    n_boot1 = 250,
    sample_size = n_obs_census,
    num_residuals = n_obs_survey,
    residuals = inference_survey$errorterm$residuals
  ),
  alt2 = bootstrap.residuals2(
    n_boot1 = 250,
    sample_size = n_obs_census,
    num_residuals = n_obs_survey,
    residuals = inference_survey$errorterm$residuals
  ),
  times = 10
)
mbm
# option 1.1 seems to be a bit faster


mbm <- microbenchmark(
  alt1.1 = bootstrap.residuals1.1(
    n_boot1 = 250,
    sample_size = n_obs_census,
    num_residuals = n_obs_survey,
    residuals = inference_survey$errorterm$residuals
  ),
  alt1.2 = bootstrap.residuals1.2(
    n_boot1 = 250,
    sample_size = n_obs_census,
    num_residuals = n_obs_survey,
    residuals = inference_survey$errorterm$residuals
  ),
  times = 4
)
mbm



mbm <- microbenchmark(
  alt1.1 = bootstrap.residuals1.1(
    n_boot1 = 250,
    sample_size = n_obs_census,
    num_residuals = n_obs_survey,
    residuals = inference_survey$errorterm$residuals
  ),
  alt2 = bootstrap.residuals2(
    n_boot1 = 250,
    sample_size = n_obs_census,
    num_residuals = n_obs_survey,
    residuals = inference_survey$errorterm$residuals
  ),
  times = 10
)
mbm
# option 2 seems to be a bit faster

mbm <- microbenchmark(
  alt1.3 = bootstrap.residuals1.3(
    n_boot1 = 250,
    sample_size = n_obs_census,
    num_residuals = n_obs_survey,
    residuals = inference_survey$errorterm$residuals
  ),
  alt2 = bootstrap.residuals2(
    n_boot1 = 250,
    sample_size = n_obs_census,
    num_residuals = n_obs_survey,
    residuals = inference_survey$errorterm$residuals
  ),
  times = 10
);mbm
# option 1.3 seems to be faster
nikosbosse/SAE documentation built on May 12, 2019, 4:37 a.m.